'''
basic -25 回形取数

问题描述
　　回形取数就是沿矩阵的边取数，若当前方向上无数可取或已经取过，则左转90度。一开始位于矩阵左上角，方向向下。
输入格式
　　输入第一行是两个不超过200的正整数m, n，表示矩阵的行和列。接下来m行每行n个整数，表示这个矩阵。
输出格式
　　输出只有一行，共mn个数，为输入矩阵回形取数得到的结果。数之间用一个空格分隔，行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
'''


''''
  1 2 3                                                       8 5 2
  4 5 6       输出第一数列(思路为一直输出矩阵的第一数列)，并将数列改为 9 6 3 
  7 8 9
                                      6 5
              同理输出第一竖，并改变数组为 3 2
'''

# m, n = map(int, input().split())
# # 输入 m*n 的矩阵
# origin = [[0 for _ in range(n)] for _ in range(m)]
# for i in range(m):
#     origin[i] = list(map(int, input().split()))
#
#
# def turn_around(a):
#     m = len(a)   # #对于一个矩阵而言，len(a)将返回矩阵的行数。3*4的矩阵有3行，因此len(a)的结果为3。
#     n = len(a[0]) #  # 这是因为a[0]表示矩阵a的第一行，而len(a[0])表示第一行的长度，即列数。
#
#     for i in range(m):
#         a[i] = a[i][1:]  # 原矩阵去掉第一列
#     b = [[0 for _ in range(m)] for _ in range(n-1)]  # b为预期更新后的(左转90°)的矩阵
#
#     for i in range(n-1):
#         for j in range(m):
#             b[i][j] = a[m-j-1][i]
#     return b
#
#
# while(origin):
#     m = len(origin)  # 矩阵的行数
#     for i in range(m):
#         print(origin[i][0], end=' ')  # 输出第一竖列
#     origin = turn_around(origin)

m, n = map(int, input().split())
mn = [[0 for _ in range(n)] for _ in range(m)]
for i in range(m):
    mn[i] = list(map(int, input().split()))

def turn_around(mn):
    m = len(mn)
    n = len(mn[0])
    for i in range(m):
        mn[i] = mn[i][1:]

    b = [[0 for _ in range(m)] for _ in range(n-1)]
    for i in range(n-1):
        for j in range(m):
            b[i][j] = mn[m-j-1][i]
    return b


while(mn):
    m = len(mn)
    for i in range(m):
        print(mn[i][0], end=' ')
    mn = turn_around(mn)